/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：呼叫中心-系统通用工具封装层
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taiping.cc.application.regex;

import com.taiping.cc.application.constant.regex.RegexExpressRuleEnum;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

@SuppressWarnings({"unused"})
public final class RegexValidateHelper {

    /**
     * 构造正则校验对象，区分大小写
     *
     * @param regexExpress 字符串形式的正则表达式
     * @return 返回正则校验的对象
     */
    private static Pattern buildCaseSensitive(String regexExpress) {
        return Pattern.compile(regexExpress);
    }

    /**
     * 构造正则校验对象，忽略大小写
     *
     * @param regexExpress 字符串形式的正则表达式
     * @return 返回正则校验的对象
     */
    private static Pattern buildIgnoreCase(String regexExpress) {
        return Pattern.compile(regexExpress, Pattern.CASE_INSENSITIVE);
    }

    /**
     * 使用正则表达式校验目标字符串是否匹配它所约束的模式，区分大小写
     *
     * @param express 字符串形式的正则表达式
     * @param target  目标字符串
     * @return 返回匹配结果，true - 满足条件，false - 不满足条件
     */
    private static boolean validateCaseSensitive(String express, String target) {
        Pattern pattern = RegexValidateHelper.buildCaseSensitive(express);
        Matcher matcher = pattern.matcher(target);
        return matcher.matches();
    }

    /**
     * 使用正则表达式校验目标字符串是否匹配它所约束的模式，忽略大小写
     *
     * @param express 字符串形式的正则表达式
     * @param target  目标字符串
     * @return 返回匹配结果，true - 满足条件，false - 不满足条件
     */
    private static boolean validateIgnoreCase(String express, String target) {
        Pattern pattern = RegexValidateHelper.buildIgnoreCase(express);
        Matcher matcher = pattern.matcher(target);
        return matcher.matches();
    }

    /**
     * 校验字符串是否为合法手机号
     */
    public static boolean validatePhone(String value) {
        return RegexValidateHelper.validateCaseSensitive(RegexExpressRuleEnum.PHONE.getExpress(), value);
    }

    /**
     * 校验字符串是否为合法电话号码
     */
    public static boolean validateTelephone(String value) {
        return RegexValidateHelper.validateCaseSensitive(RegexExpressRuleEnum.TELEPHONE.getExpress(), value);
    }

    /**
     * 校验字符串是否为合法邮件地址
     */
    public static boolean validateEmail(String value) {
        return RegexValidateHelper.validateIgnoreCase(RegexExpressRuleEnum.MAIL.getExpress(), value);
    }

    /**
     * 校验字符串是否为合法身份证号
     */
    public static boolean validateIdCard(String value) {
        return RegexValidateHelper.validateIgnoreCase(RegexExpressRuleEnum.ID_CARD.getExpress(), value);
    }

    /**
     * 校验字符串是否为合法简单密码
     */
    public static boolean validateSimplePassword(String value) {
        return RegexValidateHelper.validateIgnoreCase(RegexExpressRuleEnum.PASSWORD.getExpress(), value);
    }

    /**
     * 校验字符串是否为合法强密码
     */
    public static boolean validateStrongPassword(String value) {
        return RegexValidateHelper.validateCaseSensitive(RegexExpressRuleEnum.STRONG_PASSWORD.getExpress(), value);
    }

    /**
     * 校验字符串是否为十进制数字
     */
    public static boolean validateNumber(String value) {
        return RegexValidateHelper.validateCaseSensitive(RegexExpressRuleEnum.NUMBER.getExpress(), value);
    }

}
